package com.lang.progress;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicLong;

@FunctionalInterface
public interface DWhenCount {

    /**
     * 百分比格式化
     */
    DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.###");

    /**
     * 一百
     */
    BigDecimal HUNDRED = new BigDecimal("100");

    /**
     * 下载计数
     *
     * @param name     名称
     * @param count    本次计数
     * @param hasDone  已完成数
     * @param fileSize 文件长度
     * @param done     是否已完成
     */
    void whenCount(String name, Long count, AtomicLong hasDone, Long fileSize, Boolean done);

    /**
     * @param done  已下载长度
     * @param total 总长度
     * @return 百分比
     */
    default String percentPretty(long done, long total) {
        return DECIMAL_FORMAT.format(BigDecimal.valueOf(done).multiply(HUNDRED).divide(BigDecimal.valueOf(total), 3, RoundingMode.HALF_UP)) + "%";
    }
}
